package seqlist.stack.LeetCode;
//20. 有效的括号
//判断当前字符串是否满足条件正确的闭合字符串

import java.util.Stack;
/**
 * 思路：弄一个栈，左括号就入栈，遇到右括号就出栈比较是否相等，不相等就直接false
 * 最后判断栈是否为空，为空就true。
 */
public class Num20_isValid {
    public boolean isValid(String s) {

        Stack<Character> stack = new Stack<>();
        //把字符串s里面的字符单独取出来一一比较
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c == '(' || c == '[' || c == '{'){
                //遇到左括号就入栈
                stack.push(c);
            }else{
                //此时碰到了右括号.
                //注意边界条件，如果此时栈中没有可以弹出的元素，直接就false
                if(stack.isEmpty()){
                    return false;
                }
                char top = stack.pop();
                //开始找反例
                if(top == '(' && c != ')'){
                    return false;
                }
                if(top == '[' && c != ']'){
                    return false;
                }
                if(top == '{' && c != '}'){
                    return false;
                }
            }
        }

        //如果栈为空，则true，不为空说明左括号数大于右括号数，则false
        return stack.isEmpty();
    }
}
